//
//  SHUserAccountViewModel.swift
//  三期微博1
//
//  Created by TownFish on 16/7/24.
//  Copyright © 2016年 TownFish. All rights reserved.
//

import UIKit

class SHUserAccountViewModel: NSObject {
    //路径
    let file = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("userAccount.archiver")
    //全局访问点
    static let sharedTools:SHUserAccountViewModel = SHUserAccountViewModel()
    //创建一个用户模型
    var userAccount: SHUserAccount?
    
    //使用accessToken
    /*
        为什么使用计算型属性?
        时刻拿到accessToken是否过期 要时刻和当前使用的日期对比 才准确,所以使用计算型属性
    */
    var accessToken:String?{
        if userAccount?.access_token != nil {
            //看是否过期
            //当前保存的日期与当前日期对比,如果为降序 为未过去
            if userAccount?.expires_Date?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
                return userAccount?.access_token
            }else{
                //代表已经过期
                return nil
            }
            
        }else{
            //代表用户没有accessToken
            /*
                - 代表用户没有登录,或者没有保存数据
            */
            return nil
        }
    }
    
    //判断用户是否登录
    //通过accessToken是否为nil 为nil为未登录
    var isLogin: Bool {
        return accessToken != nil
    }
    
    
    override init() {
        super.init()
        userAccount = getUserAccount()
    }

}

//MARK: - 归档和解档
extension SHUserAccountViewModel {
    //保存对象
    func saveUserAccount(userAccount: SHUserAccount) {
        //为了解决第一次的userAccount的bug
        self.userAccount = userAccount
        //保存对象
        NSKeyedArchiver.archiveRootObject(userAccount, toFile: file)
    }
    //获取对象
    func getUserAccount() -> SHUserAccount? {

        //获取对象
        let reslut = NSKeyedUnarchiver.unarchiveObjectWithFile(file) as? SHUserAccount
        return reslut
    }
}


//MARK: - 请求数据
extension SHUserAccountViewModel{
    //请求userAccount
    func loadUserAccount(code: String, isSuccess:(isSucc: Bool) ->()){
        //第二次抽取替换
        SHNetworkTools.sharedTools.oauthLoadUserAccount(code, success: { (response) -> () in
            //判断response是否为nil 而且是否能转成字典
            guard let res = response as?[String: AnyObject] else {
                isSuccess(isSucc: false)
                return
            }
            
            //字典转模型
            let userAccount = SHUserAccount(dict: res)
            //            print(userAccount)
            
//            self.loadUserInfo(userAccount)
            self.loadUserInfo(userAccount, isSuccess: isSuccess)
            }) { (error) -> () in
                print("请求失败\(error)")
                isSuccess(isSucc: false)
                
        }

    }
    
    //请求用户信息
    func loadUserInfo(userAccount: SHUserAccount, isSuccess:(isSucc: Bool) ->()) {
        SHNetworkTools.sharedTools.oauthLoadUserInfo(userAccount, success: { (response) -> () in
            //判断response是否为nil 而且是否可以转成字典
            guard let res = response as? [String: AnyObject] else{
                isSuccess(isSucc: false)
                return
            }
            //因为当前screenname和avatar_large 本来就是可选值 所以在as的时候 只能as? 转字符串
            //给其userAccount身上两个为nil的属性赋值
            userAccount.screen_name = res["screen_name"] as? String
            userAccount.avatar_large = res["avatar_large"] as? String
            
            print(userAccount)
            
            //通过归档保存数据
            self.saveUserAccount(userAccount)
            
            isSuccess(isSucc: true)
            }) { (error) -> () in
                print("请求失败:\(error)")
                isSuccess(isSucc: false)
        }
        
    }
}
